package br.com.locasis.funcionalidades;

import java.util.ArrayList;
import java.util.List;

import javax.faces.context.FacesContext;
import javax.faces.model.SelectItem;
import javax.persistence.EntityManager;
import javax.persistence.Query;
import javax.servlet.ServletContext;

import org.jboss.seam.ScopeType;
import org.jboss.seam.annotations.In;
import org.jboss.seam.annotations.Name;
import org.jboss.seam.annotations.Scope;

import br.com.locasis.entity.Aluguel;
import br.com.locasis.entity.Automovel;
import br.com.locasis.entity.Cliente;
import br.com.locasis.utilitarios.TiposRelatorios;
import br.com.locasis.utilitarios.UtilString;
import br.com.locasis.vo.ConsultaRelatorioVO;

@Name("relatoriosController")
@Scope(ScopeType.CONVERSATION)
//@Restrict(value="#{identity.hasRole('"+PerfilUsuario.PERFIL_PETSHOP+"')}")
public class RelatoriosController {
	
	@In(create=true)
	private EntityManager entityManager;

	private List<SelectItem> listaTiposRelatorio;
	
	private List<SelectItem> listaAutomoveis;
	
	private List<SelectItem> listaClientes;
	
	private Integer idRelatorioSelecionado;
	
	private List<Aluguel> listaAlugueis;
	
	private ConsultaRelatorioVO parametros;
	
	public void onLoad(){
	}

	public ConsultaRelatorioVO getParametros() {
		if (parametros == null) {
			parametros = new ConsultaRelatorioVO();
		}
		return parametros;
	}

	public void setParametros(ConsultaRelatorioVO parametros) {
		this.parametros = parametros;
	}

	public List<SelectItem> getListaAutomoveis() {
		if (listaAutomoveis == null) {
			listaAutomoveis = new ArrayList<SelectItem>();
			listaAutomoveis.add(new SelectItem(null,"Selecione"));
			List<Automovel> lista = entityManager.createQuery("select a from Automovel a order by a.marca,a.modelo").getResultList();
			for(Automovel a : lista){
				if(a.isFlgAtivo()){
					listaAutomoveis.add(new SelectItem(a.getIdAutomovel(),a.getMarca()+" - "+a.getModelo()));
				}else{
					listaAutomoveis.add(new SelectItem(a.getIdAutomovel(),a.getMarca()+" - "+a.getModelo()+" (INATIVO)"));
				}
			}
		}
		return listaAutomoveis;
	}

	public void setListaAutomoveis(List<SelectItem> listaAutomoveis) {
		this.listaAutomoveis = listaAutomoveis;
	}

	public List<SelectItem> getListaClientes() {
		if (listaClientes == null) {
			listaClientes = new ArrayList<SelectItem>();
			listaClientes.add(new SelectItem(null,"Selecione"));
			List<Cliente> lista = entityManager.createQuery("select c from Cliente c where c.flgAtivo is true order by c.nome").getResultList();
			for(Cliente c : lista){
				listaClientes.add(new SelectItem(c.getIdCliente(),c.getNome()));
			}
		}
		return listaClientes;
	}

	public void setListaClientes(List<SelectItem> listaClientes) {
		this.listaClientes = listaClientes;
	}

	public List<Aluguel> getListaAlugueis() {
		if (listaAlugueis == null) {
			listaAlugueis = new ArrayList<Aluguel>();
		}
		return listaAlugueis;
	}

	public void setListaAlugueis(List<Aluguel> listaAlugueis) {
		this.listaAlugueis = listaAlugueis;
	}

	public Integer getIdRelatorioSelecionado() {
		return idRelatorioSelecionado;
	}

	public void setIdRelatorioSelecionado(Integer idRelatorioSelecionado) {
		this.idRelatorioSelecionado = idRelatorioSelecionado;
	}

	public List<SelectItem> getListaTiposRelatorio() {
		if (listaTiposRelatorio == null) {
			listaTiposRelatorio = new ArrayList<SelectItem>();
			listaTiposRelatorio.add(new SelectItem(null,"Selecione"));
			listaTiposRelatorio.add(new SelectItem(TiposRelatorios.TOTAL_ALUGUEIS.getId(),TiposRelatorios.TOTAL_ALUGUEIS.getDescricao()));
		}
		return listaTiposRelatorio;
	}

	public void setListaTiposRelatorio(List<SelectItem> listaTiposRelatorio) {
		this.listaTiposRelatorio = listaTiposRelatorio;
	}

	
	public String imprimirPdf(){
		return "relatorio";
	}
	
	public void gerarRelatorio(){
//		if(TiposRelatorios.TOTAL_ALUGUEIS.getId().equals(getIdRelatorioSelecionado())){
			StringBuffer query = new StringBuffer("select a from Aluguel a where a.flgAtivo is true ");
			if(getParametros().getDataInicio() != null){
				query.append(" and DATE(a.dataSaida) >= DATE(:dataInicio)");
			}
			if(getParametros().getDataFim() != null){
				query.append(" and DATE(a.dataSaida) <= DATE(:dataFim)");
			}
			if(getParametros().getIdAutomovel() != null){
				query.append(" and a.automovel.idAutomovel = :idAutomovel ");
			}
			if(getParametros().getIdCliente() != null){
				query.append(" and a.cliente.idCliente = :idCliente ");
			}
			
			query.append(" order by a.idAluguel DESC");
			
			Query qryResult = entityManager.createQuery(query.toString());
			
			if(getParametros().getDataInicio() != null){
				qryResult.setParameter("dataInicio", getParametros().getDataInicio());
			}
			if(getParametros().getDataFim() != null){
				qryResult.setParameter("dataFim", getParametros().getDataFim());
			}
			if(getParametros().getIdAutomovel() != null){
				qryResult.setParameter("idAutomovel", getParametros().getIdAutomovel());
			}
			if(getParametros().getIdCliente() != null){
				qryResult.setParameter("idCliente", getParametros().getIdCliente());
			}
			
			listaAlugueis = qryResult.getResultList();
		/*}
		else{
			listaAlugueis = new ArrayList<Aluguel>();
		}*/
	}

	@SuppressWarnings("static-access")
	public String recuperaValorTotalResultado(){
		float valor = 0;
		for(Aluguel a : getListaAlugueis()){
			valor += a.getTotalAluguel();
		}
//		DecimalFormat df = new DecimalFormat("#,###.00");
//		return "R$ "+df.format(valor);
		return UtilString.getInstance().formatarMoeda(valor);
	}
	
	public String recuperaCaminhoImagem(String nomeImagem){
		FacesContext context1 = FacesContext.getCurrentInstance();
		String caminhoAplicacao = ((ServletContext) context1.getExternalContext().getContext()).getRealPath("/");
		return caminhoAplicacao+"/img/"+nomeImagem;
	}
}
